#include "threadPool.h"

char *file_sha1( char *filename) {
    FILE *file = fopen(filename, "rb");
    if (!file) {
        perror("文件打开失败");
        return NULL;
    }
    SHA_CTX ctx;
    SHA1_Init(&ctx);// 初始化上下文

    unsigned char buffer[4096];// 4KB缓冲区，平衡I/O效率与内存
    size_t bytes_read;
    while ((bytes_read = fread(buffer, 1, sizeof(buffer), file)) > 0) {
        SHA1_Update(&ctx, buffer, bytes_read);// 分块更新哈希
    }
    unsigned char hash[SHA_DIGEST_LENGTH];// 20字节哈希结果
    SHA1_Final(hash, &ctx);
    fclose(file);

    // 转为十六进制字符串输出
    char *hex_hash = (char *)malloc(SHA_DIGEST_LENGTH * 2 + 1);
    for (int i = 0; i < SHA_DIGEST_LENGTH; i++) {
        sprintf(hex_hash + i * 2, "%02x", hash[i]);
    }
    return hex_hash; //返回堆地址
}

